package com.qdlc.p2p.dal.dao;

import java.util.List;

import com.qdlc.p2p.dal.common.dao.BaseDao;
import com.qdlc.p2p.dal.common.model.jpa.PageDataList;
import com.qdlc.p2p.dal.common.model.jpa.QueryParam;
import com.qdlc.p2p.dal.dto.User;
import com.qdlc.p2p.dal.model.BorrowModel;
import com.qdlc.p2p.dal.model.UserModel;
import com.qdlc.p2p.dal.mybatis.model.mapper.UserMapper;

/**
 * @author xx
 * @version 2.0
 * @since 2014年1月8日
 */
public interface UserDao extends BaseDao<User> {

	/**
	 * 统计注册数量
	 * 
	 * @return
	 */
	int count(QueryParam param);

	/**
	 * 根据用户名计数
	 * 
	 * @param username
	 * @return
	 */
	int countByUserName(String username);

	/**
	 * 根据身份证计数
	 * 
	 * @param cardId
	 * @return
	 */
	int countByCardId(String cardId);
	
    /**
     * 根据手机计数
     * 
     * @param mobilePhone
     * @return
     */
    int countByMobilePhone(String mobilePhone);
    
    /**
     * 根据邮箱计数 注意:已经邮箱激活的用户
     * 
     * @param email
     * @return
     */
    int countByEmail(String email);

    /**
     * 根据邮箱和用户计数，统计除此用户以外的用户是否存在该邮箱
     * @param email
     * @param userId
     * @return
     */
    int countByEmail(String email, long userId);
    
	/**
	 * 修改用户密码
	 * 
	 * @param user
	 * @return User
	 */
	User modifyPwd(User user);

	/**
	 * 修改用户交易密码
	 * 
	 * @param user
	 * @return User
	 */
	User modifyPaypwd(User user);

	/**
	 * 更新邮箱
	 * 
	 * @param userId
	 */
	User modifyEmail(User user, String email);

	/**
	 * 手机认证更新手机号码
	 * 
	 * @param userId
	 */
	User modifyPhone(User user, String phone);

	/**
	 * 获得用户清单列表
	 * 
	 * @param pageNumber
	 * @param pageSize
	 * @param model
	 * @return
	 */
	PageDataList<UserModel> userList(int pageNumber, int pageSize, UserModel model);

	/**
	 * 通过用户名获得User
	 * 
	 * @param userName
	 * @return
	 */
	User getUserByUserName(String userName);

	/**
	 *  根据用户ID获取用户
	 *  
	 * @param userId
	 * @return User
	 */
	User getUserById(long userId);
	
    /**
     * 查找已开通第三方支付的企业账户
     * @param pageNumber
     * @param pageSize
     * @return
     */
    PageDataList<User> findUserList(BorrowModel model);

    /**
	 * 获得用户认证信息列表
	 * 
	 * @param pageNumber
	 * @param pageSize
	 * @param model
	 * @return
	 */
	PageDataList<UserModel> userAttestationList(int pageNumber, int pageSize, UserModel model);
	
	 /**
     * 获取担保公司
     * @return 担保公司列表
     */
    List<User> getVouchFirms();

	 /**
     * 获取所有更新新浪存钱罐收益用用户
     * @return 用户列表
     */
	List<User> getHasBonusUser();

	/**
	 * 根据第三方交易帐号ID获取User
	 * @param tppCustId
	 * @return
	 */
	User findByTppCustId(String tppCustId);

	List<UserModel> userListForExcel(int start, int itemCount, UserModel model);

	int getCountByUserCondition(UserModel model);

	User getUserByMobilePhone(String mobilePhone);

	/**
	 * 根据时间获取注册总数
	 * @param date
	 */
	int getRegisterCountByDate(String date);
}
